/*
 * SistemaExternoBombero.java
 *
 * Created on 24-jun-2011, 1:04:00
 */

package com.sse.vista;

import java.awt.BorderLayout;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * 
 * @author DAYACO
 */
public class SistemaExterno extends javax.swing.JFrame {

	private JTextArea areaPantalla;
	// private DatagramSocket socket;
	public int puertoSistema;

	/**
	 * Creates new form SistemaExternoBomberos
	 * 
	 * @param i
	 * @param string
	 */
	public SistemaExterno(String nombreVentana, int puertoEscucha) {
		super(nombreVentana);
		this.puertoSistema = puertoEscucha;
		this.areaPantalla = new JTextArea();
		this.getContentPane().add(new JScrollPane(areaPantalla),
				BorderLayout.CENTER);
		this.setSize(400, 300);
		this.areaPantalla.setEditable(false);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

		this.setVisible(true);

		// crear objeto DatagramSocket para enviar y recibir paquetes
		try {
			runServer();
		} catch (Exception excepcionSocket) {
			// procesar los problemas que pueden ocurrir al crear el objeto
			// DatagramSocket
			excepcionSocket.printStackTrace();
			System.exit(1);
		}
	}

	public void runServer() {
		ServerSocket serv = null;// para comunicacion

		try {
			serv = new ServerSocket(puertoSistema);

			mostrarMensajeString(".......Inicio Sistema......." + "\n");
			mostrarMensajeString("Servidor: "
					+ InetAddress.getLocalHost().getHostAddress() + "\n");
			mostrarMensajeString("Puerto: " + puertoSistema + "\n");

			while (true) {
				Socket sock = null;
				sock = serv.accept();
				HiloServidorExterno cliente = new HiloServidorExterno(sock,
						this);
				cliente.start();
			}

		} catch (IOException e) {
			mostrarMensajeString(e.getMessage());
		}
	}

	public void mostrarMensajeString(final String mensajeAMostrar) {
		// mostrar el mensaje del subproceso de ejecución despachador de
		// eventos
		SwingUtilities.invokeLater(new Runnable() { // clase interna para
													// asegurar que la GUI se
													// actualice apropiadamente

					public void run() // actualiza areaPantalla
					{
						areaPantalla.append(mensajeAMostrar);
						areaPantalla.setCaretPosition(areaPantalla.getText()
								.length());
					}

				} // fin de la clase interna

				); // fin de la llamada a SwingUtilities.invokeLater
	}

	@SuppressWarnings("unchecked")
	private void initComponents() {
		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
				getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(layout.createParallelGroup(
				javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 400,
				Short.MAX_VALUE));
		layout.setVerticalGroup(layout.createParallelGroup(
				javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 300,
				Short.MAX_VALUE));
		pack();
	}

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String args[]) {
		crearHilo("SISTEMA BOMBEROS", 5010).start();
		crearHilo("SISTEMA POLICIA", 5011).start();
		crearHilo("SISTEMA AMBULANCIA", 5012).start();
		crearHilo("SISTEMA PORTERIA", 5013).start();
	}


	private static Thread crearHilo(final String nombreSistema, final int puerto) {
		return new Thread(new Runnable() {
			public void run() {
				new SistemaExterno(nombreSistema, puerto);
			}
		});
		
	}

}
